home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 031a / adg_1_3.zip / DLGTECH.C < prev    next >
C/C++ Source or Header  |  1991-02-21  |  10KB  |  328 lines

  1. /****************************************************************************
  2. Module name: DlgTech.C
  3. Programmer : Jeffrey M. Richter.
  4. *****************************************************************************/
  5.  
  6. #include "..\nowindws.h"
  7. #undef NOCOLOR
  8. #undef NOCTLMGR
  9. #undef NOGDI
  10. #undef NOKERNEL
  11. #undef NOMB
  12. #undef NOMEMMGR
  13. #undef NOMENUS
  14. #undef NOMSG
  15. #undef NOSHOWWINDOW
  16. #undef NOUSER
  17. #undef NOWINMESSAGES
  18. #undef NOWINOFFSETS
  19. #undef NOWINSTYLES
  20. #include <windows.h>
  21.  
  22. #include "dlg-opts.h"
  23. #include "dlg-mdls.h"
  24. #include "dlg-dyna.h"
  25.  
  26. #include "dlgtech.h"
  27. #include "dialog.h"
  28.  
  29. char _szAppName[] = "DlgTech";
  30. static HWND _hDlgDynamic = NULL;
  31. static HWND _hDlgModalLess = NULL;
  32.  
  33. HANDLE _hInstance = NULL;  // Our instance handle
  34.  
  35. BOOL NEAR PASCAL RegisterAppWndClass (HANDLE hInstance);
  36. LONG FAR  PASCAL AppWndProc (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
  37. BOOL FAR  PASCAL SWPDlgProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam);
  38. BOOL FAR  PASCAL AboutDlgProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam);
  39.  
  40.  
  41. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  42.                      LPSTR lpszCmdLine, int cmdShow) {
  43.    MSG msg;
  44.    HWND hWnd;
  45.  
  46.    _hInstance = hInstance;
  47.  
  48.    if (hPrevInstance == NULL)
  49.       if (!RegisterAppWndClass(hInstance))
  50.          return(0);
  51.  
  52.    hWnd = CreateWindow(_szAppName, _szAppName,
  53.       WS_OVERLAPPED | WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION |
  54.       WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME, 
  55.       CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, CW_USEDEFAULT,
  56.       NULL, NULL, hInstance, 0);
  57.  
  58.    if (hWnd == NULL) return(0);
  59.    ShowWindow(hWnd, cmdShow);
  60.    UpdateWindow(hWnd);
  61.  
  62.    while (GetMessage(&msg, NULL, 0, 0)) {
  63.       if (!IsWindow(_hDlgDynamic) || !IsDialogMessage(_hDlgDynamic, &msg)) {
  64.          TranslateMessage(&msg);
  65.          DispatchMessage(&msg);
  66.       }
  67.    }
  68.    return(0);
  69. }
  70.  
  71.  
  72. BOOL NEAR PASCAL RegisterAppWndClass (HANDLE hInstance) {
  73.    WNDCLASS WndClass;
  74.  
  75.    WndClass.style         = 0;
  76.    WndClass.lpfnWndProc   = AppWndProc;
  77.    WndClass.cbClsExtra    = 0;
  78.    WndClass.cbWndExtra    = 0;
  79.    WndClass.hInstance     = hInstance;
  80.    WndClass.hIcon         = LoadIcon(hInstance, _szAppName);
  81.    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  82.    WndClass.hbrBackground = COLOR_WINDOW + 1;
  83.    WndClass.lpszMenuName  = _szAppName;
  84.    WndClass.lpszClassName = _szAppName;
  85.    return(RegisterClass(&WndClass));
  86. }
  87.  
  88.  
  89. // ***************************************************************************
  90. // This function processes all messages sent to the main window.
  91.  
  92. LONG FAR PASCAL AppWndProc (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam) {
  93.    BOOL fCallDefProc = FALSE;
  94.    LONG lResult = 0;
  95.    static FARPROC fpProcModeless;
  96.    FARPROC fpProc;
  97.    GLOBALHANDLE hMem;
  98.    int nResult;
  99.    char szBuf[100], szName[50];
  100.  
  101.    switch (wMsg) {
  102.       case WM_CREATE:
  103.          _hDlgModalLess =
  104.             CreateModalLessDlgBox(_hInstance, "ModalLess", hWnd,
  105.                MakeProcInstance(ModalLessDlgProc, _hInstance), 0);
  106.          if (_hDlgModalLess == NULL) {
  107.             MessageBox(hWnd, "Can't create modalless dialog box.",
  108.                _szAppName, MB_OK);
  109.             EnableMenuItem(GetMenu(hWnd), IDM_MODALLESSDEMO,
  110.                MF_BYCOMMAND | MF_GRAYED);
  111.          }
  112.          break;
  113.  
  114.       case WM_CLOSE:
  115.          if (_hDlgModalLess)
  116.             DestroyModalLessDlgBox(_hDlgModalLess);
  117.          fCallDefProc = TRUE;
  118.          break;
  119.  
  120.       case WM_DESTROY:
  121.          PostQuitMessage(0);
  122.          break;
  123.  
  124.       case WM_COMMAND:
  125.          switch (wParam) {
  126.  
  127.          case IDM_OPTIONSDEMO:
  128.             fpProc = MakeProcInstance(OptionsDlgProc, _hInstance);
  129.             DialogBox(_hInstance, "Options", hWnd, fpProc);
  130.             FreeProcInstance(fpProc);
  131.             break;
  132.  
  133.  
  134.          case IDM_DYNAMICMODALDEMO:
  135.             hMem = BuildDynamicDlgBox(FALSE);
  136.             if (hMem == NULL) {
  137.                MessageBox(hWnd, "Insufficient memory.", _szAppName, MB_OK);
  138.                break;
  139.             }
  140.             fpProc = MakeProcInstance(DynamicDlgProc, _hInstance);
  141.             DialogBoxIndirect(_hInstance, hMem, hWnd, fpProc);
  142.             FreeProcInstance(fpProc);
  143.             GlobalFree(hMem);
  144.             break;
  145.  
  146.  
  147.          case IDM_DYNAMICMODELESSDEMO:
  148.             if (_hDlgDynamic != NULL) {
  149.                DestroyWindow(_hDlgDynamic);
  150.                _hDlgDynamic = NULL;
  151.                CheckMenuItem(GetMenu(hWnd), wParam, MF_BYCOMMAND | MF_UNCHECKED);
  152.                FreeProcInstance(fpProcModeless);
  153.                break;
  154.             }
  155.  
  156.             hMem = BuildDynamicDlgBox(TRUE);
  157.             if (hMem == NULL) {
  158.                MessageBox(hWnd, "Insufficient memory.", _szAppName, MB_OK);
  159.                break;
  160.             }
  161.  
  162.             fpProcModeless = MakeProcInstance(DynamicDlgProc, _hInstance);
  163.             _hDlgDynamic = CreateDialogIndirect(_hInstance,
  164.                GlobalLock(hMem), hWnd, fpProcModeless);
  165.  
  166.             GlobalUnlock(hMem);
  167.             GlobalFree(hMem);
  168.             CheckMenuItem(GetMenu(hWnd), wParam, MF_BYCOMMAND | MF_CHECKED);
  169.             break;
  170.  
  171.  
  172.          case IDM_MODALLESSDEMO:
  173.             nResult = ModalLessDlgBox(_hDlgModalLess, hWnd, 0);
  174.             GetDlgItemText(_hDlgModalLess, ID_NAME, szName, sizeof(szName));
  175.             wsprintf(szBuf, "Button: %s, Name: %s",
  176.                (nResult == IDOK) ? (LPSTR) "Ok" : (LPSTR) "Cancel",
  177.                (LPSTR) szName);
  178.             MessageBox(hWnd, szBuf, _szAppName, MB_OK);
  179.             break;
  180.  
  181.          case IDM_SETWINDOWPOSDEMO:
  182.             fpProc = MakeProcInstance(SWPDlgProc, _hInstance);
  183.             DialogBox(_hInstance, "SetWindowPos", hWnd, fpProc);
  184.             FreeProcInstance(fpProc);
  185.             break;
  186.  
  187.          case IDM_ABOUT:
  188.             // Display about box
  189.             fpProc = MakeProcInstance(AboutDlgProc, _hInstance);
  190.             DialogBox(_hInstance, "About", hWnd, fpProc);
  191.             FreeProcInstance(fpProc);
  192.             break;
  193.  
  194.          default:
  195.             // Any option's that we do not process should be 
  196.             // passed to DefWindowProc.
  197.             fCallDefProc = TRUE;
  198.             break;
  199.          }
  200.  
  201.          break;
  202.  
  203.       default:
  204.          fCallDefProc = TRUE; break;
  205.    }
  206.  
  207.    if (fCallDefProc)
  208.       lResult = DefWindowProc(hWnd, wMsg, wParam, lParam);
  209.  
  210.    return(lResult);
  211. }
  212.  
  213. //****************************************************************************
  214. // Functions for the SetWindowPos Dialog Box Demonstration.
  215.  
  216. BOOL FAR PASCAL SWPDlgProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam) {
  217.    BOOL fProcessed = TRUE;
  218.    HWND hWndControl;
  219.    WORD wDlgWidth, wDlgHeight;
  220.    switch (wMsg) {
  221.  
  222.       case WM_INITDIALOG:
  223.          break;
  224.  
  225.       case WM_COMMAND:
  226.          switch (wParam) {
  227.             case IDOK:
  228.             case IDCANCEL:
  229.                if (HIWORD(lParam) == BN_CLICKED)
  230.                   EndDialog(hDlg, wParam);
  231.                break;
  232.  
  233.             case ID_CHANGETABORDER:
  234.                if (HIWORD(lParam) != BN_CLICKED)
  235.                   break;
  236.  
  237.                // Order is "&Name:", "edit", "Over &25".
  238.                // Move "Over &25" after "&Name:" field.
  239.                SetWindowPos(GetDlgItem(hDlg, ID_OVER25),
  240.                   GetDlgItem(hDlg, ID_NAMETEXT),
  241.                   0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  242.  
  243.                // Order is "&Name:", "Over &25", "edit".
  244.                // Move "&Name:" after "Over &25" field.
  245.                SetWindowPos(GetDlgItem(hDlg, ID_NAMETEXT),
  246.                   GetDlgItem(hDlg, ID_OVER25),
  247.                   0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  248.  
  249.                // Order is "Over &25", "&Name:", "edit".
  250.  
  251.                // Set the focus to the control after this button..
  252.                SetFocus(GetNextDlgTabItem(hDlg, LOWORD(lParam), 0));
  253.  
  254.                EnableWindow(LOWORD(lParam), FALSE);
  255.                break;
  256.  
  257.  
  258.             case ID_ADDCONTROL:
  259.                if (HIWORD(lParam) != BN_CLICKED)
  260.                   break;
  261.  
  262.                wDlgWidth  = LOWORD(GetDialogBaseUnits());
  263.                wDlgHeight = HIWORD(GetDialogBaseUnits());
  264.  
  265.                hWndControl = CreateWindow("scrollbar", "",
  266.                   SBS_HORZ | WS_CHILD | WS_TABSTOP | WS_GROUP,
  267.                   (64 * wDlgWidth) / 4, (36 * wDlgHeight) / 8,
  268.                   (64 * wDlgWidth) / 4, (12 * wDlgHeight) / 8,
  269.                   hDlg, ID_SCROLLBAR, _hInstance, 0);
  270.  
  271.                SetWindowPos(hWndControl, LOWORD(lParam),
  272.                   0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
  273.  
  274.                // Set the focus to the control after this button..
  275.                SetFocus(GetNextDlgTabItem(hDlg, LOWORD(lParam), 0));
  276.  
  277.                EnableWindow(LOWORD(lParam), FALSE);
  278.                break;
  279.  
  280.  
  281.             default:
  282.                break;
  283.          }
  284.          break;
  285.  
  286.       default:
  287.          fProcessed = FALSE; break;
  288.    }
  289.    return(fProcessed);
  290. }
  291.  
  292.  
  293. //****************************************************************************
  294. // Function for the About Box.
  295.  
  296. BOOL FAR PASCAL AboutDlgProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam) {
  297.    char szBuffer[100];
  298.    BOOL fProcessed = TRUE;
  299.  
  300.    switch (wMsg) {
  301.  
  302.       case WM_INITDIALOG:
  303.          // Set version static window to have date and time of compilation.
  304.          wsprintf(szBuffer, "%s at %s", (LPSTR) __DATE__, (LPSTR) __TIME__);
  305.          SetWindowText(GetDlgItem(hDlg, ID_VERSION), szBuffer);
  306.  
  307.          break;
  308.  
  309.       case WM_COMMAND:
  310.          switch (wParam) {
  311.             case IDOK:
  312.             case IDCANCEL:
  313.                if (HIWORD(lParam) == BN_CLICKED)
  314.                   EndDialog(hDlg, wParam);
  315.                break;
  316.  
  317.             default:
  318.                break;
  319.          }
  320.          break;
  321.  
  322.       default:
  323.          fProcessed = FALSE;
  324.          break;
  325.    }
  326.    return(fProcessed);
  327. }
  328.